package com.foreknow.controller;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

/**
 * 服务器端的应用程序
 * 主要的作用
 * 1.处理客户端的请求
 * 2.可以收集表单的数据
 * 如何创建一个servlet程序：让当前类继承HTTPServlet
 * 继承之后我们要重写父类中的方法doget()/dopost()
 *如果客户端向服务器端发送的是get请求，那么就会自动调用doget方法
 *如果客户端向服务器端发送的是post请求，那么就会自动调用dopost方法
 *
 * 方法的参数：
 *      关于请求的方法
 *          http1.1支持多种请求方式：常用的方式有 get  post  put  delete
 *
 * HttpServletRequest req 接口  请求  这个对象会封装一些客户端的请求参数
 * HttpServletRequest接口的作用：
 * 1.可以提取客户端的请求信息：比如说 提取表单信息  提取http的头信息  cookie信息
 * 2.修改字符的编码
 * 3.在服务器端保存一些数据
 * 4.转换资源（资源的跳转）
 *
 * HttpServletResponse resp 接口  响应  向客户端返回一些内容
 *
 * Servlet的生命周期：就是一个对象从它被创建开始一直到它被销毁掉。---------------------------生命周期
 * 三个阶段：
 * 1.初始化阶段  init()方法
 * 2.响应客户端请求的阶段  service()方法
 * 3.销毁阶段  destroy()方法
 *
 * 如何简化jsp页面：jstl  标签库  el表达式  来 简化jsp页面
 * EL：它是jsp中一种简洁的数据访问语言，简化jsp的开发
 * 基本语法： ${表达式}
 * 1.可以使用EL表达式来访问作用域中（request）的对象
 * 2.可以使用EL表达式来访问bean对象中的属性 ${对象名，属性名}
 * 3.可以使用EL表达式来访问数组
 * 4.可以通过EL表达式提供的一些隐式对象（requestScope）来访问指定作用域中的对象 ${requestScope.对象名}
 *
 * Http协议：它是一种无状态的连接协议。
 *
 * Web中的四个作用域：
 *  *  application > session > request > page(默认)
 *  *  application：保存在此作用域中的数据只有是服务器不关闭，保存在application中的数据会一直有效
 *  *  session：只要浏览器不关闭，数据会一直有效
 */
public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置服务器端向客户端响应的内容的类型(MIME)
        resp.setContentType("text/html;charset=utf-8");
        //要使用这个对象中的方法在页面中输出内容
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>这是一个servelt程序</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>这是一个测试程序servelt</h1>");
        out.println(new Date()+"<br>");
        out.println("向客户端向服务器端请求的方法"+req.getMethod()+"<br>");
        out.println("获取请求的url:"+req.getRequestURL()+"<br>");
        out.println("获取请求的uri:"+req.getRequestURI()+"<br>");
        out.println("获取到当前项目的名称:"+req.getContextPath()+"<br>");
        out.println("获取到本地的端口号："+req.getLocalPort()+"<br>");
        out.println("获取到http协议名称："+req.getProtocol()+"<br>");
        out.println("</body>");
        out.println("</html>");
        out.flush();
        out.close();
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    public void destroy() {
        System.out.println("destroy销毁了");
    }

//    @Override
//    public void init() throws ServletException {
//        System.out.println("init带我飞威风威风");
//    }

    @Override
    public void init(ServletConfig config) throws ServletException {
//        ServletConfig:使用此对象中的方法可以获取web.xml中配置的初始化参数，局部获取
//        String pageSize=config.getInitParameter("pageSize");
//        全局获取
//        String pageSize = config.getServletContext().getInitParameter("pageSize");
//        System.out.println(Integer.parseInt(pageSize));
        System.out.println("开始了");
    }
}
